<?php
if(!defined('SYSTEM_PATH')) die('Cannot access this page directly or see your configuration file ') ;
/**
 * Cosmo
 * 
 * Classe parente du projet cosmo
 * Gestion du debug
 * 
 * @package cosmoClan
 * @author menTiss - Staff SeS
 * @copyright 2007-2008
 * @version 0.1.1
 * @access public
 **/
class Cosmo extends Error {	
	private $_debug = array() ;
	protected $load ;

	/**
	 * Cosmo::__construct()
	 * 
	 * @desc 	Permet d'initialiser le système des objets de cosmo, rend disponible l'objet Loader
	 * @param string $logPath
	 **/
	public function __construct() {
		parent::__construct() ;
		// We need to get the Loader class :
		$this->load =& Loader::getInstance() ;
		return $this ;
	}
	/**
	 * Cosmo::addDebug()
	 * 
	 * @desc 	Ajoute une nouvelle ligne au debug
	 * @param string $msg
	 * @param object $object
	 * @return 
	 **/
	final private function addDebug($msg, $object = null) {
		if(is_string($sMsg)) {
			if(is_object($object)) {
				$this->_debug[] = array(time(),get_class($object),$msg) ;
			} else {
				$this->_debug[] = array(time(),$msg) ;
			}			
		} else {
			return false;
		}
		return true;
	}
	/**
	 * Cosmo::getDebug()
	 * 
	 * @desc 	Retourne les messages de debug sous différentes formes ("liste" html, "echo" html simple, "log" fichier de logging ou brut (php array) par défaut)
	 * @param string $mode
	 * @return 
	 **/
	final private function getDebug($mode = 'liste') {
		switch($mode) {
			case 'liste' :
				// Formatage du tableau de debug
				$string = '<ul><li>DEBUG</li><ul>' ;
				foreach($this->_debug as $line) {
					if(count($line) == 3) {
						$string .= '<li>'.date('d/m/Y H:i:s',$line[0]).' : Object '.$line[1].' => '.$line[2].'</li>' ;	
					} else {
						$string .= '<li>'.date('d/m/Y H:i:s',$line[0]).' : '.$line[1].'</li>' ;
					}					
				} 
				$string .= '</ul></ul>' ;
				return $string ;
			case 'echo' :
				$string = '' ; 
				foreach($this->_debug as $line) {
					$string .= 'DEBUG : ' ;
					if(count($line) == 3) {
						$string .= date('d/m/Y H:i:s',$line[0]).' : object '.$line[0].' => '.$line[1].'<br />' ;
					} else {
						$string .= date('d/m/Y H:i:s',$line[0]).' : '.$line[1].'<br />' ;
					}
				}
				return $string ;
			case 'log' :
				$today = date('Ydm') ;
				if($log = @fopen($this->_logPath.'/'.$today.'_debug.log','a')) {
					foreach($this->_debug as $line) {
						if(is_array($line)) {
							@fwrite($log,date('d/m/Y H:i:s',$line[0]).' : Object '.$line[1].' => '.$line[2]."\n") ;
						} else {
							@fwrite($log,date('d/m/Y H:i:s',$line[0]).' : '.$line[1]."\n") ;
						}						
					}
					@fclose($log) ;
					return true;
				} else {
					return false;
				}						
			default : return $this->_debug ;
		}
	}
	/**
	 * Cosmo::shutdow()
	 * 
	 * @param mixed $msg
	 * @return 
	 **/
	public function shutdow($msg) {
		die($msg) ;
	}
	
}